<!DOCTYPE html>
<html lang="zh" dir="auto">

<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>SML v3.4.0 | 幸福工厂模组</title>
<meta name="keywords" content="">
<meta name="description" content="发布日期：2022年10月2日 官方下载： 本站下载： 适配版本：U6 CL202470 更新日志： For Users Inject a scrollbox to the HUB rewards section so mods that add more than 10 reward items don&rsquo;t cause visual problems. (#136) Sort loaded mods alphabetically in the mod menu">
<meta name="author" content="VisualMOD">
<link rel="canonical" href="https://visualmod.gitee.io/satisfactory-mod/loader/v3.4.0/">
<link crossorigin="anonymous" href="/satisfactory-mod/assets/css/stylesheet.fda8facc5b630094d5b2968a3585893846cba1d07e967f92a271b6a941eb2d90.css" integrity="sha256-/aj6zFtjAJTVspaKNYWJOEbLodB&#43;ln&#43;SonG2qUHrLZA=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/satisfactory-mod/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
    onload="hljs.initHighlightingOnLoad();"></script>
<link rel="icon" href="https://visualmod.gitee.io/satisfactory-mod/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://visualmod.gitee.io/satisfactory-mod/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://visualmod.gitee.io/satisfactory-mod/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://visualmod.gitee.io/satisfactory-mod/apple-touch-icon.png">
<link rel="mask-icon" href="https://visualmod.gitee.io/satisfactory-mod/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" hreflang="zh" href="https://visualmod.gitee.io/satisfactory-mod/loader/v3.4.0/">
<link rel="alternate" hreflang="en" href="https://visualmod.gitee.io/satisfactory-mod/en/loader/v3.4.0/">
<noscript>
    <style>
        #theme-toggle,
        .top-link {
            display: none;
        }

    </style>
    <style>
        @media (prefers-color-scheme: dark) {
            :root {
                --theme: rgb(29, 30, 32);
                --entry: rgb(46, 46, 51);
                --primary: rgb(218, 218, 219);
                --secondary: rgb(155, 156, 157);
                --tertiary: rgb(65, 66, 68);
                --content: rgb(196, 196, 197);
                --hljs-bg: rgb(46, 46, 51);
                --code-bg: rgb(55, 56, 62);
                --border: rgb(51, 51, 51);
            }

            .list {
                background: var(--theme);
            }

            .list:not(.dark)::-webkit-scrollbar-track {
                background: 0 0;
            }

            .list:not(.dark)::-webkit-scrollbar-thumb {
                border-color: var(--theme);
            }
        }

    </style>
</noscript><meta property="og:title" content="SML v3.4.0" />
<meta property="og:description" content="发布日期：2022年10月2日 官方下载： 本站下载： 适配版本：U6 CL202470 更新日志： For Users Inject a scrollbox to the HUB rewards section so mods that add more than 10 reward items don&rsquo;t cause visual problems. (#136) Sort loaded mods alphabetically in the mod menu" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://visualmod.gitee.io/satisfactory-mod/loader/v3.4.0/" /><meta property="article:section" content="loader" />
<meta property="article:published_time" content="2023-06-02T19:00:00+08:00" />
<meta property="article:modified_time" content="2023-06-02T19:00:00+08:00" />

<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="SML v3.4.0"/>
<meta name="twitter:description" content="发布日期：2022年10月2日 官方下载： 本站下载： 适配版本：U6 CL202470 更新日志： For Users Inject a scrollbox to the HUB rewards section so mods that add more than 10 reward items don&rsquo;t cause visual problems. (#136) Sort loaded mods alphabetically in the mod menu"/>


<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [, 
    {
      "@type": "ListItem",
      "position":  2 ,
      "name": "模组加载器 SML",
      "item": "https://visualmod.gitee.io/satisfactory-mod/loader/"
    }, 
    {
      "@type": "ListItem",
      "position":  3 ,
      "name": "SML v3.4.0",
      "item": "https://visualmod.gitee.io/satisfactory-mod/loader/v3.4.0/"
    }
  ]
}
</script>
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "SML v3.4.0",
  "name": "SML v3.4.0",
  "description": "发布日期：2022年10月2日 官方下载： 本站下载： 适配版本：U6 CL202470 更新日志： For Users Inject a scrollbox to the HUB rewards section so mods that add more than 10 reward items don\u0026rsquo;t cause visual problems. (#136) Sort loaded mods alphabetically in the mod menu",
  "keywords": [
    
  ],
  "articleBody": "发布日期：2022年10月2日\n官方下载： 本站下载： 适配版本：U6 CL202470\n更新日志：\nFor Users Inject a scrollbox to the HUB rewards section so mods that add more than 10 reward items don’t cause visual problems. (#136) Sort loaded mods alphabetically in the mod menu (#129) Adjust width of mod list column to fit longer mod names (#130) Add ‘Open on Ficsit.app’, ‘Open Documentation’, and ‘Get Support’ buttons to the mod menu for mods that support it (#136) (#139) Remove ‘Enum MAX’ from displaying as an option for config dropdowns (#124) Better mods list placeholder text when first opened (#136) Add dynamic colored outline to config spinbox widget text for better readability (#136) For Mod Devs The directions here can help you update your mod to Update 6 and SML3.4.0.\nUpdate project to CL202470 Fix Widget_CP_NumericText ignoring min/max bounds, and make it play the error value animation when you try to do so. This can break mod configs that were inadvertently relying on this bug! Now, to get an unbounded numeric text entry field, set the max equal to the min. (#136) Use Log for blueprint logging instead of LogBlueprintLogging (#136) Add scrollbox to Alpakit Mod Entry List (#140) Conditionally display “Open Documentation” and “Get Support” buttons on the Mod Config screen if the mod provides DocsURL and SupportURL in their uplugin (#139) Copy DocsURL and SupportURL from Plugin Descriptor into Mod Info struct so blueprints can access it Add support for tooltips to config CP Section widget - previously the field was silently ignored (#136) Add HookOffsetStart bool to BindOnBPFunction (#138) Fix for blueprint reflection library (#119) Save ModMetadata and missing mod warnings (#128) Allow selecting null class in Widget CP Class when the config property allows it (#136) Display spinbox number without decimals when the property type is integer (#136) Fix String config property widgets not actually being disabled when requiring world reload (#136) Fix Enum config property widget assuming BP_ConfigPropertyInteger when CP_Integer also works (#136) Fix CP Section not having a space between SectionHeaderText (SectionDisplayName) (#136) Remove minimum height constraints on various config widgets so that you don’t have to scroll as far to reach a mod’s custom config widget (#136) Cleanup (#136) Add SMLEditor to the uproject file so UE doesn’t always mention an update to the uproject file Remove build-erroring unused Prop field (#143) Add Alpakit exception to .gitignore Add plugin Crypto to .gitignore Use existing FactoryGame main menu check Better feedback + error messages when using the Set Mod Config button in MenuPreviewWidget in SMLEditor Replace deprecated UObjectProperty with FObjectProperty in ItemTooltipSubsystem Clean up unused ‘EditorValueSelection’ macro with bad casts and unknown function call Changes to ExampleMod (#134) (#136) Fix Example Building hologram and component structure Fix slow build effect on Example Building Fix categories on Example Building and Item so they shows up in menus Implement PreConstruct WindowDark fix on example UI (see docs for more info) Improve example widget displayed info Better demo of the functionality of slider/spinbox widgets Edit default config values to no longer have them outside of config var min/maxes Add Example Item description info on its custom name/description implementations Remove crashing chat message call in Example Building code Remove Constructor Mk2 from ExampleRecipe builders ",
  "wordCount" : "561",
  "inLanguage": "zh",
  "datePublished": "2023-06-02T19:00:00+08:00",
  "dateModified": "2023-06-02T19:00:00+08:00",
  "author":{
    "@type": "Person",
    "name": "VisualMOD"
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://visualmod.gitee.io/satisfactory-mod/loader/v3.4.0/"
  },
  "publisher": {
    "@type": "Organization",
    "name": "幸福工厂模组",
    "logo": {
      "@type": "ImageObject",
      "url": "https://visualmod.gitee.io/satisfactory-mod/favicon.ico"
    }
  }
}
</script>
</head>

<body class="" id="top">
<script>
    if (localStorage.getItem("pref-theme") === "dark") {
        document.body.classList.add('dark');
    } else if (localStorage.getItem("pref-theme") === "light") {
        document.body.classList.remove('dark')
    } else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
        document.body.classList.add('dark');
    }

</script>

<header class="header">
    <nav class="nav">
        <div class="logo">
            <a href="https://visualmod.gitee.io/satisfactory-mod" accesskey="h" title="幸福工厂模组 (Alt + H)">幸福工厂模组</a>
            <div class="logo-switches">
                <button id="theme-toggle" accesskey="t" title="(Alt + T)">
                    <svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
                        fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
                        stroke-linejoin="round">
                        <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
                    </svg>
                    <svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
                        fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
                        stroke-linejoin="round">
                        <circle cx="12" cy="12" r="5"></circle>
                        <line x1="12" y1="1" x2="12" y2="3"></line>
                        <line x1="12" y1="21" x2="12" y2="23"></line>
                        <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
                        <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
                        <line x1="1" y1="12" x2="3" y2="12"></line>
                        <line x1="21" y1="12" x2="23" y2="12"></line>
                        <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
                        <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
                    </svg>
                </button>
                <ul class="lang-switch"><li>|</li>
                    <li>
                        <a href="https://visualmod.gitee.io/satisfactory-mod/en/" title="English"
                            aria-label="English">English</a>
                    </li>
                </ul>
            </div>
        </div>
        <ul id="menu">
            <li>
                <a href="https://visualmod.gitee.io/satisfactory-mod/manager" title="模组管理器">
                    <span>模组管理器<small>&nbsp;SMM</small></span>
                </a>
            </li>
            <li>
                <a href="https://visualmod.gitee.io/satisfactory-mod/loader" title="模组加载器">
                    <span>模组加载器<small>&nbsp;SML</small></span>
                </a>
            </li>
            <li>
                <a href="https://visualmod.gitee.io/satisfactory-mod/home/modlist" title="⚙ 模组列表">
                    <span>⚙ 模组列表</span>
                </a>
            </li>
            <li>
                <a href="https://visualmod.gitee.io/satisfactory-mod/search" title="🔍搜索 (Alt &#43; /)" accesskey=/>
                    <span>🔍搜索</span>
                </a>
            </li>
        </ul>
    </nav>
</header>
<main class="main">

<article class="post-single">
  <header class="post-header">
    <div class="breadcrumbs"><a href="https://visualmod.gitee.io/satisfactory-mod">主页</a>&nbsp;»&nbsp;<a href="https://visualmod.gitee.io/satisfactory-mod/loader/">模组加载器 SML</a></div>
    <h1 class="post-title entry-hint-parent">
      SML v3.4.0
    </h1>
    <div class="post-meta"><span title='2023-06-02 19:00:00 +0800 CST'>六月 2, 2023</span>&nbsp;·&nbsp;VisualMOD&nbsp;|&nbsp;语言:
<ul class="i18n_list">
    <li>
        <a href="https://visualmod.gitee.io/satisfactory-mod/en/loader/v3.4.0/">English</a>
    </li>
</ul>

</div>
  </header> 
  <div class="post-content"><p>发布日期：2022年10月2日</p>
<p>官方下载：<a class="deco-none" href="https://github.com/satisfactorymodding/SatisfactoryModLoader/releases/tag/v3.4.0" target="_blank"><img class="inline-img in-text"height="24" src="https://visualmod.gitee.io/satisfactory-mod/images/github.svg" alt="SatisfactoryModLoader v3.4.0" style="object-fit:contain"></a>   <a class="deco-none" href="https://github.com/satisfactorymodding/SatisfactoryModLoader/releases/download/v3.4.0/SML.zip" target="_blank"><img class="inline-img in-text"height="24" src="https://visualmod.gitee.io/satisfactory-mod/images/zip.svg" alt="SML.zip" style="object-fit:contain"></a></p>
<p>本站下载：<a class="deco-none" href="https://gitee.com/visualmod/satisfactory-mod/releases/download/sml-v3.4.0/SML.zip" target="_blank"><img class="inline-img in-text"height="24" src="https://visualmod.gitee.io/satisfactory-mod/images/gitee.svg" alt="SML.zip" style="object-fit:contain"></a>   <a class="deco-none" href="https://smr.hustag.cn/smr/sml/download/v3.4.0/SML.zip" target="_blank"><img class="inline-img in-text"height="24" src="https://visualmod.gitee.io/satisfactory-mod/images/txcloud.svg" alt="SML.zip" style="object-fit:contain"></a></p>
<p>适配版本：U6 CL202470</p>
<hr>
<p>更新日志：</p>
<h2 id="for-users">For Users<a hidden class="anchor" aria-hidden="true" href="#for-users">#</a></h2>
<ul>
<li>Inject a scrollbox to the HUB rewards section so mods that add more than 10 reward items don&rsquo;t cause visual problems. (#136)</li>
<li>Sort loaded mods alphabetically in the mod menu (#129)</li>
<li>Adjust width of mod list column to fit longer mod names (#130)</li>
<li>Add &lsquo;Open on Ficsit.app&rsquo;, &lsquo;Open Documentation&rsquo;, and &lsquo;Get Support&rsquo; buttons to the mod menu for mods that support it (#136) (#139)</li>
<li>Remove &lsquo;Enum MAX&rsquo; from displaying as an option for config dropdowns (#124)</li>
<li>Better mods list placeholder text when first opened (#136)</li>
<li>Add dynamic colored outline to config spinbox widget text for better readability (#136)
<ul>
<li><img class="inline-img in-text"height="40" src="https://visualmod.gitee.io/satisfactory-mod/contents/189396830-151fae94-c35d-4b74-b484-7a13d3871f5c.png" alt="image" style="object-fit:contain"></li>
<li><img class="inline-img in-text"height="30" src="https://visualmod.gitee.io/satisfactory-mod/contents/189397243-6595a795-0f01-4d25-8955-e4f5d32d221e.png" alt="image" style="object-fit:contain"></li>
</ul>
</li>
</ul>
<h2 id="for-mod-devs">For Mod Devs<a hidden class="anchor" aria-hidden="true" href="#for-mod-devs">#</a></h2>
<p>The directions <a href="https://docs.ficsit.app/satisfactory-modding/latest/Development/UpdatingToNewVersions.html">here</a> can help you update your mod to Update 6 and SML3.4.0.</p>
<ul>
<li>Update project to CL202470</li>
<li>Fix Widget_CP_NumericText ignoring min/max bounds, and make it play the error value animation when you try to do so. <strong>This can break mod configs that were inadvertently relying on this bug!</strong> Now, to get an unbounded numeric text entry field, set the max equal to the min. (#136)</li>
<li>Use <code>Log&lt;ModReference&gt;</code> for blueprint logging instead of <code>LogBlueprintLogging</code> (#136)</li>
<li>Add scrollbox to Alpakit Mod Entry List (#140)</li>
<li>Conditionally display &ldquo;Open Documentation&rdquo; and &ldquo;Get Support&rdquo; buttons on the Mod Config screen if the mod provides DocsURL and SupportURL in their uplugin (#139)
<ul>
<li>Copy DocsURL and SupportURL from Plugin Descriptor into Mod Info struct so blueprints can access it</li>
</ul>
</li>
<li>Add support for tooltips to config CP Section widget - previously the field was silently ignored (#136)</li>
<li>Add HookOffsetStart bool to BindOnBPFunction (#138)</li>
<li>Fix for blueprint reflection library (#119)</li>
<li>Save ModMetadata and missing mod warnings (#128)</li>
<li>Allow selecting null class in Widget CP Class when the config property allows it (#136)
<ul>
<li><img class="inline-img in-text"height="60" src="https://visualmod.gitee.io/satisfactory-mod/contents/189411982-855fc5b2-cefa-420e-a27b-f7d6fb36b3a5.png" alt="image" style="object-fit:contain"></li>
</ul>
</li>
<li>Display spinbox number without decimals when the property type is integer (#136)</li>
<li>Fix String config property widgets not actually being disabled when requiring world reload (#136)</li>
<li>Fix Enum config property widget assuming BP_ConfigPropertyInteger when CP_Integer also works (#136)</li>
<li>Fix CP Section not having a space between <code>SectionHeaderText (SectionDisplayName)</code> (#136)</li>
<li>Remove minimum height constraints on various config widgets so that you don&rsquo;t have to scroll as far to reach a mod&rsquo;s custom config widget (#136)</li>
</ul>
<h3 id="cleanup-136">Cleanup (#136)<a hidden class="anchor" aria-hidden="true" href="#cleanup-136">#</a></h3>
<ul>
<li>Add SMLEditor to the uproject file so UE doesn&rsquo;t always mention an update to the uproject file</li>
<li>Remove build-erroring unused Prop field (#143)</li>
<li>Add Alpakit exception to .gitignore</li>
<li>Add plugin Crypto to .gitignore</li>
<li>Use existing FactoryGame main menu check</li>
<li>Better feedback + error messages when using the Set Mod Config button in MenuPreviewWidget in SMLEditor</li>
<li>Replace deprecated UObjectProperty with FObjectProperty in ItemTooltipSubsystem</li>
<li>Clean up unused &lsquo;EditorValueSelection&rsquo; macro with bad casts and unknown function call</li>
</ul>
<h3 id="changes-to-examplemod-134-136">Changes to ExampleMod (#134) (#136)<a hidden class="anchor" aria-hidden="true" href="#changes-to-examplemod-134-136">#</a></h3>
<ul>
<li>Fix Example Building hologram and component structure</li>
<li>Fix slow build effect on Example Building</li>
<li>Fix categories on Example Building and Item so they shows up in menus</li>
<li>Implement PreConstruct WindowDark fix on example UI (see <a href="https://github.com/satisfactorymodding/Documentation/pull/135">docs</a> for more info)</li>
<li>Improve example widget displayed info</li>
<li>Better demo of the functionality of slider/spinbox widgets</li>
<li>Edit default config values to no longer have them outside of config var min/maxes</li>
<li>Add Example Item description info on its custom name/description implementations</li>
<li>Remove crashing chat message call in Example Building code</li>
<li>Remove Constructor Mk2 from ExampleRecipe builders</li>
</ul>


  </div>

  <footer class="post-footer">
    <ul class="post-tags">
    </ul>
  </footer>
</article>
    </main>
    
<footer class="footer">
    <span>&copy; 2023 <a href="https://visualmod.gitee.io/satisfactory-mod">幸福工厂模组</a></span>
    <span>
        Powered by
        <a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
        <a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
    </span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
        <path d="M12 6H0l6-6z" />
    </svg>
</a>

<script>
    let menu = document.getElementById('menu')
    if (menu) {
        menu.scrollLeft = localStorage.getItem("menu-scroll-position");
        menu.onscroll = function () {
            localStorage.setItem("menu-scroll-position", menu.scrollLeft);
        }
    }

    document.querySelectorAll('a[href^="#"]').forEach(anchor => {
        anchor.addEventListener("click", function (e) {
            e.preventDefault();
            var id = this.getAttribute("href").substr(1);
            if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
                document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
                    behavior: "smooth"
                });
            } else {
                document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
            }
            if (id === "top") {
                history.replaceState(null, null, " ");
            } else {
                history.pushState(null, null, `#${id}`);
            }
        });
    });

</script>
<script>
    var mybutton = document.getElementById("top-link");
    window.onscroll = function () {
        if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
            mybutton.style.visibility = "visible";
            mybutton.style.opacity = "1";
        } else {
            mybutton.style.visibility = "hidden";
            mybutton.style.opacity = "0";
        }
    };

</script>
<script>
    document.getElementById("theme-toggle").addEventListener("click", () => {
        if (document.body.className.includes("dark")) {
            document.body.classList.remove('dark');
            localStorage.setItem("pref-theme", 'light');
        } else {
            document.body.classList.add('dark');
            localStorage.setItem("pref-theme", 'dark');
        }
    })

</script>
<script>
    document.querySelectorAll('pre > code').forEach((codeblock) => {
        const container = codeblock.parentNode.parentNode;

        const copybutton = document.createElement('button');
        copybutton.classList.add('copy-code');
        copybutton.innerHTML = '复制';

        function copyingDone() {
            copybutton.innerHTML = '已复制！';
            setTimeout(() => {
                copybutton.innerHTML = '复制';
            }, 2000);
        }

        copybutton.addEventListener('click', (cb) => {
            if ('clipboard' in navigator) {
                navigator.clipboard.writeText(codeblock.textContent);
                copyingDone();
                return;
            }

            const range = document.createRange();
            range.selectNodeContents(codeblock);
            const selection = window.getSelection();
            selection.removeAllRanges();
            selection.addRange(range);
            try {
                document.execCommand('copy');
                copyingDone();
            } catch (e) { };
            selection.removeRange(range);
        });

        if (container.classList.contains("highlight")) {
            container.appendChild(copybutton);
        } else if (container.parentNode.firstChild == container) {
            
        } else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
            
            codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
        } else {
            
            codeblock.parentNode.appendChild(copybutton);
        }
    });
</script>
</body>

</html>
